/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package klient;

import java.sql.Date;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import niezalogowany.WyszukajKsiazkeDAO;

/**
 *
 * @author xxx
 */
public class MojeKsiazkiDAO extends WyszukajKsiazkeDAO {

    public ArrayList<WypozyczonaKsiazkaData> pobierzWypozyczoneKsiazki(Integer idBiblioteczny) {
        ArrayList<WypozyczonaKsiazkaData> list = new ArrayList<WypozyczonaKsiazkaData>();
        try {
            query = " select * , if((current_date-data_zwrotu)>0 ,(current_date-data_zwrotu)*0.2 , 0 ) do_zaplaty "
                    + "from wypozyczenia wyp , "
                    + "ksiazki ks, "
                    + "autorzy au,"
                    + "wydawnictwa wyd "
                    + "where  wyp.ident_ksiazki= ks.ident_ksiazki "
                    + "and ks.ident_autora = au.ident_autora "
                    + "and ks.ident_wydawnictwa = wyd.ident_wydawnictwa "
                    + "and wyp.ident_biblioteczny=?";
            prepStmt = conn.prepareStatement(query);
            prepStmt.setInt(1, idBiblioteczny);
            rs = prepStmt.executeQuery();

            while (rs.next()) {
                WypozyczonaKsiazkaData data = new WypozyczonaKsiazkaData();
                data.setIdWypozyczenia(rs.getInt("numer_wypozyczenia"));
                data.setIdKsiazki(rs.getInt("ident_ksiazki"));
                data.setDataWypozyczenia(rs.getDate("data_wypozyczenia"));
                data.setDataOddania(rs.getDate("data_zwrotu"));
                data.setIsbn(rs.getString("numer_isbn"));
                data.setTytul(rs.getString("tytul"));
                data.setDataWydania(rs.getDate("data_wydania"));
                data.setNazwiskoAutora(rs.getString("nazwisko"));
                data.setImieAutora(rs.getString("imie"));
                data.setNazwaWydawnictwa(rs.getString("nazwa_wydawnictwa"));
                data.setStatus(rs.getString("status"));
                data.setIloscProlongat(rs.getInt("prolongata"));

                data.setDoZaplaty(rs.getDouble("do_zaplaty"));
                list.add(data);


            }

            return list;

        } catch (SQLException ex) {
            error(ex.getMessage());
            Logger.getLogger(MojeKsiazkiDAO.class.getName()).log(Level.SEVERE, null, ex);
        }

        return null;
    }

    ArrayList<WypozyczonaKsiazkaData> pobierzZarezerwowaneKsiazki(Integer idBiblioteczny) {
        ArrayList<WypozyczonaKsiazkaData> list = new ArrayList<WypozyczonaKsiazkaData>();
        try {
            query = "select * from rezerwacje wyp , ksiazki ks, autorzy au,wydawnictwa wyd "
                    + "where  wyp.ident_ksiazki= ks.ident_ksiazki "
                    + "and ks.ident_autora = au.ident_autora "
                    + "and ks.ident_wydawnictwa = wyd.ident_wydawnictwa "
                    + "and wyp.ident_biblioteczny=?";
            prepStmt = conn.prepareStatement(query);
            prepStmt.setInt(1, idBiblioteczny);
            rs = prepStmt.executeQuery();

            while (rs.next()) {
                WypozyczonaKsiazkaData data = new WypozyczonaKsiazkaData();
                data.setIdWypozyczenia(rs.getInt("numer_rezerwacji"));
                data.setIdKsiazki(rs.getInt("ident_ksiazki"));
                data.setDataWypozyczenia(rs.getDate("data_rezerwacji"));
                data.setDataOddania(rs.getDate("data_wygasniecia"));
                data.setIsbn(rs.getString("numer_isbn"));
                data.setTytul(rs.getString("tytul"));
                data.setDataWydania(rs.getDate("data_wydania"));
                data.setNazwiskoAutora(rs.getString("nazwisko"));
                data.setImieAutora(rs.getString("imie"));
                data.setNazwaWydawnictwa(rs.getString("nazwa_wydawnictwa"));

                list.add(data);


            }

            return list;

        } catch (SQLException ex) {
            error(ex.getMessage());
            Logger.getLogger(MojeKsiazkiDAO.class.getName()).log(Level.SEVERE, null, ex);
        }

        return null;
    }

    void usunRezerwacje(Integer idKsiazki) {
        Integer ile;
        try {
            query = "delete from rezerwacje "
                    + "where ident_ksiazki=?";
            prepStmt = conn.prepareStatement(query);
            prepStmt.setInt(1, idKsiazki);
            ile = prepStmt.executeUpdate();

            if (ile > 0) {
                query = " UPDATE biblioteka.ksiazki "
                        + "SET status = 'wypożyczona' "
                        + "WHERE ksiazki.ident_ksiazki =?";

                prepStmt = conn.prepareStatement(query);
                prepStmt.setInt(1, idKsiazki);// za ile dni ma oddać ) od dzisiaj)                 
                ile = prepStmt.executeUpdate();

                if (ile == 0) {
                    error("Nie udało się usunać rezerwacji");
                }


            } else {
                error("Nie udało się usunać rezerwacji.");
            }


        } catch (SQLException ex) {
            error(ex.getMessage());
            Logger.getLogger(MojeKsiazkiDAO.class.getName()).log(Level.SEVERE, null, ex);
        }

    }


    public Date prolonguj(Integer idKsiazki) {
        Integer ile;
        Integer suma = 0;


        try {
            query = "select prolongata from wypozyczenia where ident_ksiazki=?";
            prepStmt = conn.prepareStatement(query);
            prepStmt.setInt(1, idKsiazki);
            rs = prepStmt.executeQuery();

            if (rs.next()) {
                if (rs.getInt("prolongata") >= 3) {
                    error("Nie możesz prolongować tej samej książki więcej niż 3 razy. Oddaj książkę.");
                }


                query = "select * from rezerwacje "
                        + "where ident_ksiazki=?";
                prepStmt = conn.prepareStatement(query);
                prepStmt.setInt(1, idKsiazki);
                rs = prepStmt.executeQuery();
                if (rs.next()) {
                    error("Niestaty, w tym momencie ktoś zarezerwował tę książkę.");
                    return null;
                }

                query = "SELECT *"
                        + "FROM wypozyczenia wy "
                        + "WHERE wy.ident_biblioteczny=? "
                        + "and wy.prolongata>=1";
                prepStmt = conn.prepareStatement(query);
                prepStmt.setInt(1, getIdBiblioteczny());
                rs = prepStmt.executeQuery();


                while (rs.next()) {
                    suma = suma + 1;
                }


                if (suma >= 3) {
                    error("Nie możesz prolongować więcej niż 3 książek.");
                    return null;
                }


                query = "UPDATE wypozyczenia SET prolongata=prolongata+1 WHERE ident_ksiazki=?";
                prepStmt = conn.prepareStatement(query);
                prepStmt.setInt(1, idKsiazki);
                ile = prepStmt.executeUpdate();

                if (ile > 0) {
                    query = "update wypozyczenia set data_zwrotu=DATE_ADD(current_date, INTERVAL 7 DAY) where ident_ksiazki=?";
                    prepStmt = conn.prepareStatement(query);
                    prepStmt.setInt(1, idKsiazki);
                    ile = prepStmt.executeUpdate();

                    if (ile == 0) {
                        error("Przepraszamy, nie możemy przedłużyć panu książki.");
                        return null;
                    }

                    query = "select wy.data_zwrotu "
                            + "from wypozyczenia wy "
                            + "where wy.ident_ksiazki=? ";
                    prepStmt = conn.prepareStatement(query);
                    prepStmt.setInt(1, idKsiazki);
                    rs = prepStmt.executeQuery();

                    if (rs.next()) {
                        return rs.getDate("data_zwrotu");
                    } else {
                        error("Błąd przy próbie plongowania.");
                        return null;
                    }

                } else {
                    error("Błąd przy próbie plongowania.");
                    return null;
                }


            } else {
                error("Nie wypożyczyłeś tej książki ?");
                return null;
            }


        } catch (SQLException ex) {
            error(ex.getMessage());
            Logger.getLogger(MojeKsiazkiDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
}
